/*
 * $$Id: CharArrayWrapper.java,v 1.3 2004/01/26 11:32:05 bel70 Exp $$
 *
 * ***** BEGIN LICENSE BLOCK *****
 * The contents of this file are subject to the Mozilla Public License
 * Version 1.1 (the "License"); you may not use this file except in 
 * compliance with the License. You may obtain a copy of the License 
 * at http://www.mozilla.org/MPL/
 *
 * Software distributed under the License is distributed on an "AS IS"
 * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
 * the License for the specific language governing rights and 
 * limitations under the License.
 *
 * The Original Code is JGossip forum code.
 *
 * The Initial Developer of the Original Code is the JResearch, Org. 
 * Portions created by the Initial Developer are Copyright (C) 2004 
 * the Initial Developer. All Rights Reserved. 
 * 
 * Contributor(s): 
 *              Dmitry Belov <bel@jresearch.org>
 *        
 * ***** END LICENSE BLOCK ***** */
package com.jred.filters;

import java.io.CharArrayWriter;
import java.io.PrintWriter;

import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletResponseWrapper;


/**
 * A response wrapper that takes everything the client would normally output
 * and saves it in one big character array.
 */
public class CharArrayWrapper extends HttpServletResponseWrapper {
    private CharArrayWriter charWriter;

    /**
     * Initializes wrapper.
     * 
     * <P>
     * First, this constructor calls the parent constructor. That call is
     * crucial so that the response is stored and thus setHeader, setStatus,
     * addCookie, and so forth work normally.
     * </p>
     * 
     * <P>
     * Second, this constructor creates a CharArrayWriter that will be used to
     * accumulate the response.
     * </p>
     *
     * @param response DOCUMENT ME!
     */
    public CharArrayWrapper(HttpServletResponse response) {
        super(response);
        charWriter = new CharArrayWriter();
    }

    /**
     * When servlets or JSP pages ask for the Writer, don't give them the real
     * one. Instead, give them a version that writes into the character array.
     * The filter needs to send the contents of the array to the client
     * (perhaps after modifying it).
     *
     * @return DOCUMENT ME!
     */
    public PrintWriter getWriter() {
        return (new PrintWriter(charWriter));
    }

    /**
     * Get a String representation of the entire buffer.
     * 
     * <P>
     * Be sure <B>not</B> to call this method multiple times on the same
     * wrapper. The API for CharArrayWriter does not guarantee that it
     * "remembers" the previous value, so the call is likely to make a new
     * String every time.
     * </p>
     *
     * @return DOCUMENT ME!
     */
    public String toString() {
        return (charWriter.toString());
    }

    /**
     * Get the underlying character array.
     *
     * @return DOCUMENT ME!
     */
    public char[] toCharArray() {
        return (charWriter.toCharArray());
    }
}
